package com.youlin.controller;

import com.youlin.dto.BaseDataResDto;
import com.youlin.dto.BaseReqDto;
import com.youlin.dto.BaseResDto;
import com.youlin.dto.Status;
import com.youlin.dto.req.*;
import com.youlin.dto.res.AllTTResDto;
import com.youlin.dto.res.DMResDto;
import com.youlin.entities.*;
import com.youlin.service.*;
import com.youlin.untils.MyBeanUtil;
import com.youlin.untils.MyEnum;
import io.swagger.annotations.*;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;

@ApiSort(8)
@Api(tags = {"8 - 逝者信息管理"})
@RestController
@RequestMapping("/bygDeadMan")
public class BygDeadManController {

    @Autowired
    private BygDeadManService bygDeadManService;
    @Autowired
    private BygBgTemplateService bygBgTemplateService;
    @Autowired
    private BygTextTemplateService bygTextTemplateService;
    @Autowired
    private BygMusicTemplateService bygMusicTemplateService;
    @Autowired
    private BygPhotoService photoService;

    /**
     * 回显逝者资料、模板、相册
     *
     * @return
     */
    @PostMapping("/operate/findDeadManById")
    @ApiOperationSort(1)
    @ApiOperation(value = "1 - 回显逝者资料、模板、相册", notes = "请求参数：data = 逝者ID")
    public BaseDataResDto<DMResDto> findDeadManById(@RequestBody BaseReqDto<String> baseReqDto) {
        String deadId = baseReqDto.getData();
        if (StringUtils.isBlank(deadId)) return new BaseDataResDto<>(Status.PARAMETERERROR);
        return bygDeadManService.findDeadManById(deadId);
    }

    /**
     * 编辑逝者资料
     *
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/editDeadManData")
    @ApiOperationSort(2)
    @ApiOperation(value = "2 - 编辑逝者资料")
    public BaseResDto<Status, String> editDeadManData(@RequestBody BaseReqDto<EditDMDataReqDto> baseReqDto) {
        EditDMDataReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto<>(Status.PARAMETERERROR);
        if ((StringUtils.isBlank(data.getLifeTitle1()) || StringUtils.isBlank(data.getLifeStory1())) &&
                (StringUtils.isBlank(data.getLifeTitle2()) || StringUtils.isBlank(data.getLifeStory2())))
            return new BaseResDto<>(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData(data);
    }

    /**
     * 获取背景模板封面列表
     *
     * @return
     */
    @PostMapping("/operate/findAllBgTlIndexs")
    @ApiOperationSort(3)
    @ApiOperation(value = "3 - 获取背景模板封面列表")
    public BaseDataResDto<List<BygBgTemplate>> findAllBgTlIndexs() {
        return bygBgTemplateService.findAllBgTls(null, Arrays.asList(MyEnum.BG_TYPE_INDEX.getValue()));
    }

    /**
     * 设置背景模板
     *
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/setDMBg")
    @ApiOperationSort(4)
    @ApiOperation(value = "4 - 设置背景模板")
    public BaseResDto<Status, String> setDMBg(@RequestBody BaseReqDto<SetDMBgReqDto> baseReqDto) {
        SetDMBgReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto<>(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData(data);
    }

    /**
     * 获取文案选择中的背景模板列表
     *
     * @return
     */
    @PostMapping("/operate/findAllBgTlsByName")
    @ApiOperationSort(5)
    @ApiOperation(value = "5 - 获取文案选择中的背景模板列表", notes = "请求参数：data = 背景模板ID")
    public BaseResDto<Status, String> findAllBgTlsByName(@RequestBody BaseReqDto<Integer> baseReqDto) {
        Integer bgId = baseReqDto.getData();
        if (bgId == null) return new BaseResDto<>(Status.PARAMETERERROR);
        List<Integer> types = Arrays.asList(MyEnum.BG_TYPE_HEAD.getValue(),
                MyEnum.BG_TYPE_LIFE.getValue(), MyEnum.BG_TYPE_SINAME.getValue());
        return bygBgTemplateService.findAllBgTls(bgId, types);
    }

    /**
     * 获取所有文案模板列表
     *
     * @return
     */
    @PostMapping("/operate/findAllTxTls")
    @ApiOperationSort(6)
    @ApiOperation(value = "6 - 获取所有文案模板列表")
    public BaseDataResDto<List<AllTTResDto>> findAllTxTls() {
        return bygTextTemplateService.findAllTxTls();
    }

    /**
     * 设置文案模板
     *
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/setDMTX")
    @ApiOperationSort(7)
    @ApiOperation(value = "7 - 设置文案模板")
    public BaseResDto<Status, String> setDMTX(@RequestBody BaseReqDto<SetDMTXReqDto> baseReqDto) {
        SetDMTXReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto<>(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData(data);
    }

    /**
     * 获取背景音乐模板列表
     *
     * @return
     */
    @PostMapping("/operate/findAllMsTls")
    @ApiOperationSort(8)
    @ApiOperation(value = "8 - 获取背景音乐模板列表")
    public BaseDataResDto<List<BygMusicTemplate>> findAllMsTls() {
        return bygMusicTemplateService.findAllMsTls();
    }

    /**
     * 设置音乐模板
     *
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/setDMMs")
    @ApiOperationSort(9)
    @ApiOperation(value = "9 - 设置音乐模板")
    public BaseResDto<Status, String> setDMMs(@RequestBody BaseReqDto<SetDMMsReqDto> baseReqDto) {
        SetDMMsReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto<>(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData(data);
    }

    /**
     * 设置家庭照或编辑相册
     *
     * @return
     */
    @PostMapping("/operate/saveDmPhotos/{type}")
    @ApiOperationSort(10)
    @ApiOperation(value = "10 - 设置家庭照或编辑相册",
            notes = "请求路径：/operate/saveDmPhotos/1-设置家庭照，/operate/saveDmPhotos/2-编辑相册\n" +
                    "响应参数：status-message = {1021-逝者相册有且只有一张为家庭照，1034-照片尺寸错误(520*700/625*415/530*620)}")
    public BaseDataResDto<Integer> editDmPhotos(@RequestBody BaseReqDto<List<PhotoReqDto>> baseReqDto) {
        List<PhotoReqDto> photos = baseReqDto.getData();
        if (MyBeanUtil.isEmpty(photos)) return new BaseDataResDto<>(Status.SUCCESS);
        return photoService.editDmPhotos(photos);
    }

    /**
     * 删除逝者相册照片数据
     *
     * @return
     */
    @PostMapping("/operate/delDmPhoto")
    @ApiOperationSort(11)
    @ApiOperation(value = "11 - 删除逝者相册照片数据", notes = "请求参数：data = 照片ID \n" +
            "响应参数：status-message = {1029-不能删除家庭照}")
    public BaseResDto<Status, String> delDmPhoto(@RequestBody BaseReqDto<Integer> baseReqDto) {
        Integer photoId = baseReqDto.getData();
        if (photoId == null) return new BaseResDto<>(Status.PARAMETERERROR);
        return photoService.delDmPhoto(photoId);
    }

}

